package cn.han.oop;
/*本类用于多态的入门案例*/
public class TestDemo {
    public static void main(String[] args) {
        Animal a = new Animal();
        Cat c = new Cat();
        Dog d = new Dog();
        a.eat();
        c.eat();
        d.eat();
        //父类不能调用子类的特有功能
//        a.jump();
        /*创建多态对象进行测试
        父类引用指向子类对象
        * 解释：创建出来的子类对象的地址值，交给父类类型的引用类型变量来保存*/
        Animal a2 = new Cat();
        Animal a3 = new Dog();
        a2.eat();
        a3.eat();
        //a2.jump();
        //a3.run();
        /*编译看左边，运行看右边
        * 解释：必须要在父类里定义这个方法，才能通过编译编译时，把多态对象看做父类类型、
        * 必须要在子类中重写父类定义的这个方法，运行时，方法体使用的是子类的功能*/

    }
}


/*1.多态的前提：继承+重写*/
class Animal{

    public void eat(){
        System.out.println("小动物吃啥都行");
    }
}

class Cat extends Animal{
    @Override
    public void eat(){
        System.out.println("小猫爱吃鱼");
    }
    public void jump(){
        System.out.println("小猫跳的老高了");
    }
}

class Dog extends Animal{
    @Override//如果重写成功，不报错
    public void eat(){
        System.out.println("小狗爱吃肉");

    }
    public void run(){
        System.out.println("小狗跑的可快了");
    }

}

